package com.tedu.api.d1_object;

/**
 * 本类用于测试Object类的使用
 * 重写toString方法
 */
public class Test1_Object {
    public static void main(String[] args) {
        /**
         * 测试toString();
         */
        //alt+shift+L  new Student();
        Student s = new Student(18,"孙悟空");
        //com.tedu.api.Object.Student@1b6d3586---地址

        //重写了Object.toString()方法
        System.out.println(s);//Student{age=18, name='孙悟空'}

        /**
         * 测试hashCode()---返回对象再内存中的哈希码值
         */
        System.out.println(s.hashCode());//460141958

        Student s2=new Student(18,"孙悟空");
        /**
         * 测试equals()方法
         * 底层用==进行比较，比较的是s  s2 的地址值
         */
        System.out.println(s.equals(s2));//false
    }

}
//创建Student类并定义属性
class Student{
    int age;
    String name;
    public Student() {}
    public Student(int age, String name) {
        super();//默认存在，可以不写
        this.age = age;
        this.name = name;
    }
    //重写toString
    @Override
    public String toString() {
        return "Student{" +
                "age=" + age +
                ", name='" + name + '\'' +
                '}';
    }

    //重写equals()
    //比较s与s2的属性值
    @Override
    public boolean equals(Object obj) {
        //匹配类型-判断是否是学生类型
        //instanceof比较类型  大  顶级父类Obiect
        if(obj instanceof Student){//匹配类型
            //把obj强转成Student类型,想用子类的特有属性
            Student argsStudent=(Student)obj;
            if(this.name==argsStudent.name
            &&this.age== argsStudent.age){//匹配属性
                return true;
            }
        }
        return false;
    }

/*    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof Student)) return false;
        Student student = (Student) o;
        return age == student.age && name.equals(student.name);
    }*/


}